{
 "cells": [
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "8999b786",
   "metadata": {},
   "source": [
    "<div align='center' ><font size='5'>浙江工商大学2022/2023学年第一学期考试试卷(A)</font></div>\n",
    "\n",
    "\n",
    "\n",
    "课程名称： **Python在金融中的应用**    考试方式：**独立作业**\n",
    "\n",
    "班级名称：_______     学号：______      姓名： ______  \n",
    "\n",
    "| 题号 | 一   | 二   | 三   | 四   | 合计 |\n",
    "| ---- | ---- | ---- | ---- | ---- | ---- |\n",
    "| 满分 | 20   | 25   | 25   | 30   | 100  |\n",
    "| 得分 |      |      |      |      |      |\n",
    "\n",
    "\n",
    "\n",
    "**注意事项：**\n",
    "\n",
    "1. 请大家务必独立完成，独立大作业视作考试，请不要抄袭。\n",
    "\n",
    "2. 判分会综合考虑代码和运行结果，因此如果运行结果发生问题，可以仅提供代码。注意：没有代码过程的结果不给分。\n",
    "\n",
    "3. 请给代码加上注释，如果发生代码结果错误，但可以读懂代码并有充分的注释，将会酌情给分。\n",
    "\n",
    "4. 作图的结果请不要用截图，数据显示请不要选择显示全部。 \n",
    "\n",
    "5. 在完成作业要求的基础上，鼓励大家根据自己的理解做适当的拓展。\n",
    "\n",
    "6. 请大家注意版面的整洁和清晰程度。电子版务必转成pdf格式(在浏览器中使用Ctrl+P即可完成打印到PDF)。 \n",
    "\n",
    "    \n",
    "\n",
    "   **作业最晚提交时间： 待定   届时烦请每个班派一位代表联系我，将纸质版和电子版的作业交至我处。**"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "1da2cc87",
   "metadata": {},
   "source": [
    "**作业一：**\n",
    "\n",
    "1.1 注册[Tushare](https://tushare.pro/)网站，获取个人的token和120积分（注册成功有100积分、然后修改个人信息有20积分），可参阅[此处](https://tushare.pro/document/1?doc_id=37)了解如何注册并获取token（应该在课堂上完成该步骤，故不计分）。\n",
    "请使用你的token，下载当前所有正常上市交易的股票列表，将其放到一个dataframe之中，并剔除**上市日期晚于2000年的所有股票**。（5%）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a4a0fac9",
   "metadata": {},
   "outputs": [],
   "source": [
    "import tushare as ts\n",
    "import pandas as pd\n",
    "# 请填入你的代码，以及必要的注释"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "c4615393",
   "metadata": {},
   "source": [
    "1.2 请使用`numpy`中的`numpy.random.randint()`的函数（注意可能需要使用`size`参数），在上题中取得的A股数据中随机选取20个股票，并将其从2020年1月1日至2022年12月20日的每日收盘价数据收集起来。(5%)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "4b2dbe7c",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "# 请填入你的代码，以及必要的注释"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "df96dab6",
   "metadata": {},
   "source": [
    "1.3 请将20个股票的**收盘价**信息置入一个dataframe当中，每行的column head是股票的代码（i.e. 000001.SZ），index为每个交易日（最新的交易日收盘价在最后一行），每行的信息是20个股票的收盘价。如某一天因为任何情况导致其中一个或者几个股票没有收盘价，则**删除该日的所有股票的信息**，做到该dataframe没有空值（即便没有此类情况，也需在代码中体现去除空值的代码，否则将不能得到该部分的分数）。（10%）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "252e80d8",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 请填入你的代码，以及必要的注释"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "5b366e58",
   "metadata": {},
   "source": [
    "**作业二：**\n",
    "\n",
    "1.1 使用作业一当中取得的20支股票的收盘价数据，将其转化成收益率。使用pandas中的`shift`函数，具体可以参看[官网介绍](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.shift.html)（请不要使用pct_chg数据，但可以用来校对你生成的答案）（5%）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d787e9fb",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 请填入你的代码，以及必要的注释"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "e07ac06e",
   "metadata": {},
   "source": [
    "1.2 使用pandas中的`cumsum`函数，具体可以参看[官网介绍](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.cumsum.html)，计算出该20支股票的累积收益率序列，并将20个最终的收益率由高到低排列，并使用函数`plot.bar`做柱形图表示（x轴为股票代码，柱子高度正比于累计收益率的大小），具体可以参看[官网介绍](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.plot.bar.html)。（10%）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "81556aed",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 请填入你的代码，以及必要的注释"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "5a77a2e3",
   "metadata": {},
   "source": [
    "1.3 使用numpy的`std`的函数，将20个股票的日收益率的标准差求出，记做日波动率。并使用20个股票的平均日收益率除以每个股票的日波动率，记做非年化的夏普比例。取出该夏普比例最高的5个股票和最低的5个股票，将选出的10个股票的累积收益率作图（使用matplotlib函数做折线图，x轴为时间，y轴为累积收益率）。（10%）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "3e8e42bf",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 请填入你的代码，以及必要的注释"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "b140a343",
   "metadata": {},
   "source": [
    "**作业三：**\n",
    "\n",
    "3.1 使用1.1中得到的所有A股市场的上市公司数据，提取所有**房地产**行业的上市公司，将上市公司根据上市地点的不同，做不同省份（或者直辖市）的柱状图。一个地区一个柱，柱子的长度代表该地区的公司数量。柱状图从左到右，降序排列。要求使用pandas的相应函数，也可以选用部分numpy以及matplotlib的函数。（10%）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "c1b44226",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 请填入你的代码，以及必要的注释"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "f220f45d",
   "metadata": {},
   "source": [
    "3.2 利用3.1的数据，将所有房地产行业的上市公司根据上市时间进行排列。使用子图的形式，做两张图。第一张是上市时间分布，即在每年各有多少家房地产行业的公司上市；第二张是累积上市公司数量的分布，即截止到每一年底，全国共有多少家房地产行业的上市公司。要求使用pandas的相应函数，也可以选用部分numpy以及matplotlib的函数。（10%）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "409ad8a9",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 请填入你的代码，以及必要的注释"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "dceb9fd4",
   "metadata": {},
   "source": [
    "3.3 根据matplotlib课程的最后一个例子，任选5个城市，10个年份，做出一个三维图像，即每一年份，房地产行业上市公司的数量在5个城市的分布情况。也可以选用`plotly`包中的[函数](https://plotly.com/python/3d-charts/) （5%）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "2311e169",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 请填入你的代码，以及必要的注释"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "a13f0f76",
   "metadata": {},
   "source": [
    "**作业四：**\n",
    "\n",
    "4.1 使用matplotlib的相应函数，做出一张图，其中包含2*2共4张子图，每张图为一个股票的收盘价走势。(1.1 中的股票任选)（10%）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "aaa90ef9",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 请填入你的代码，以及必要的注释"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "3e6f5d19",
   "metadata": {},
   "source": [
    "4.2 使用numpy和matplotlib的相应函数，计算5个股票（使用收盘价）的日收益率，并做出5个股票收益率之间的相关性，将其协方差矩阵通过热力图（`imshow`或者`sns.heatmap`）来展现。（10%）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "c396faf3",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 请填入你的代码，以及必要的注释"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "bdbdb902",
   "metadata": {},
   "source": [
    "4.3 通过计算累积收益率，在所有的股票当中，选取2022年（仅一年）表现最好的5个股票（即累积收益率最高）。将该5个股票在2022年的每日收益率放入一张表单，列名为股票代码，每一行代表每一天的日收益率，无数据的日子填入na，最后将该表格存储成`top5stock.csv`文件（10%）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "fb67c04e",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 请填入你的代码，以及必要的注释"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.6 (default, Aug  5 2022, 15:21:02) \n[Clang 14.0.0 (clang-1400.0.29.102)]"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": false
  },
  "vscode": {
   "interpreter": {
    "hash": "31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6"
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
